﻿using System;
using System.IO;
using System.Web;
using System.Web.UI.WebControls;

namespace Agricultural_Sales.CS
{
    public class Upload_Image
    {
        // 用于存储操作结果提示信息的公共字段
        public string tips;

        /// <summary>
        /// 图片上传方法
        /// </summary>
        /// <param name="file">FileUpload控件，包含用户选择的文件</param>
        /// <returns>返回上传成功后的文件相对路径，失败则返回空字符串</returns>
        public string uploadimg(FileUpload file)
        {
            // 初始化返回的图片URL为空字符串
            string imgurl = "";

            // 检查用户是否选择了文件
            if (file.HasFile)
            {
                // 获取文件扩展名并验证文件格式
                // 只允许上传 .jpg、.gif、.png 三种图片格式
                if (Path.GetExtension(file.FileName) == ".jpg" ||
                    Path.GetExtension(file.FileName) == ".gif" ||
                    Path.GetExtension(file.FileName) == ".png")
                {
                    try
                    {
                        // 声明文件路径相关变量
                        string path, fileold, filenew;

                        // 获取服务器端Image目录的物理路径
                        // Server.MapPath将虚拟路径转换为服务器物理路径
                        path = HttpContext.Current.Server.MapPath("~/Image/");

                        // 获取原始文件名
                        fileold = file.FileName;

                        // 生成新的唯一文件名，避免文件名冲突
                        // 格式：年月日时分秒毫秒_4位随机字符.扩展名
                        // 例如：20231215143025123_a7eb.jpg
                        string extension = Path.GetExtension(fileold);  // 获取文件扩展名
                        // filenew = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "_" + 
                        //          Guid.NewGuid().ToString().Substring(0, 4) + extension;
                        filenew = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "_" + file.FileName;
                        // 将文件保存到服务器指定目录
                        // Path.Combine用于安全地组合路径
                        file.SaveAs(Path.Combine(path, filenew));

                        // 设置成功提示信息
                        tips = "上传成功!";

                        // 返回文件的相对URL路径，用于在网页中显示图片
                        // 使用 ~/ 表示应用程序根目录的相对路径
                        imgurl = "~/Image/" + filenew;
                    }
                    catch (Exception ex)
                    {
                        // 捕获上传过程中的异常（如磁盘空间不足、权限问题等）
                        tips = "错误：" + ex.Message.ToString();
                    }
                }
                else
                {
                    // 文件格式不符合要求的错误提示
                    tips = "错误：文件类型错误";
                }
            }
            else
            {
                // 用户未选择文件的错误提示
                tips = "错误：还没有上传文件呢！";
            }

            // 返回图片URL（成功时返回路径，失败时返回空字符串）
            return imgurl;
        }
    }
}